﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.IO;

namespace NGourd.Core.Runners
{
    public interface IConfiguration
    {
        IList<IReporter> Reporters { get; } // TODO: This should be IEnumerable<>
        IList<Assembly> Assemblies { get; } // TODO: This should be IEnumerable<>
        bool IsDryRun { get; }
        bool IsInQuietMode { get; }
        IList<string> FeatureSet { get; } // TODO: This should be IEnumerable<>
        IList<FileInfo> FeatureFiles { get; } // TODO: This should be IEnumerable<>
    }

    public class Configuration : IConfiguration
    {
        public Configuration()
        {
            Assemblies = new List<Assembly>();
            IsDryRun = false;
            FeatureSet = new List<string>();
            Reporters = new List<IReporter>();
            FeatureFiles = new List<FileInfo>();
        }

        #region IConfiguration Members

        public IList<IReporter> Reporters
        {
            get;
            set;
        }

        public IList<Assembly> Assemblies
        {
            get;
            private set;
        }

        public bool IsDryRun
        {
            get;
            set;
        }

        public bool IsInQuietMode
        {
            get;
            set;
        }

        public IList<string> FeatureSet
        {
            get;
            private set;
        }

        public IList<FileInfo> FeatureFiles
        {
            get;
            private set;
        }

        #endregion
    }
}
